home *** CD-ROM | disk | FTP | other *** search
/ Precision Software Appli…tions Silver Collection 1 / Precision Software Applications Silver Collection Volume One (PSM) (1993).iso / tutor / advtutr.exe / ADVENT6.DOC < prev    next >
Text File  |  1986-08-31  |  7KB  |  170 lines

  1.                       How to Write an Adventure
  2.                            Part 6
  3.      
  4. Advanced techniques and routines
  5.      
  6.      While the adventure, as outlined in the previous files WILL run, there 
  7. are alot of elegant touches we can give the game to make it look and behave 
  8. more professionally. Those ideas to be covered in this files are:
  9.      1. Display Inventory
  10.      2. Command Shorthand
  11.      3. Display a Word List
  12.      4. Opening invisable doors
  13.      5. Saves and Loads
  14.      6. Ending the game
  15.      7. Machine specific ideas for better appearance
  16.      
  17. INVENTORY
  18.      
  19.      Since your puppet in the adventure can pick up and put dowm things, it 
  20. would be nice to have some sort of routine to display what it is that he is 
  21. holding at any given time. This is done by making just a few changes to the 
  22. VISABLE OBJECTS routine in the display screen and placing it in a routine to 
  23. be accessed by the one word command "INVENTORY". Here's the code:
  24.      
  25.      13000 Z=0:PRINT"YOU ARE CURRENTLY HOLDING: ";
  26.      13010 FOR X=1 TO OBJECTS:IF L(X)<>-1 THEN 13050
  27.      13020 IF Z<>0 THEN PRINT", ";
  28.      13030 IF POS(0)+LEN(OBJECT$(X))+3>79 THEN PRINT
  29.      13040 PRINT OBJECT$(X);
  30.      13050 NEXT:IF Z=0 THEN PRINT "NOTHING":GOTO 1000
  31.      13060 PRINT:GOTO 1000
  32.      
  33.      As you can see this routine is identical to the earlier routine EXCEPT 
  34. that instead of testing for an object being located in room L, we test for it 
  35. being located in room -1 (the puppet's hands).
  36.      
  37. SHORTHAND
  38.      
  39.      We have been assuming all long that the command parser is working with 
  40. the full words that you have chosen for communications. To quote an old song 
  41. "It tain't necessarily so!". You can save memory, and make the typing chores 
  42. of your players lighter by making the parser interpret only the first 3 or 4 
  43. letters of the word (whichever is enough to remove ambiguity). Here's how we 
  44. do that.
  45.      When the parser breaks the input string down into VERB$ and NOUN$, add to 
  46. the code a line that does the following:
  47.      
  48.      10?? VB$=LEFT$(VERB$,3):NN$=LEFT$(NOUN$,3)
  49.      
  50.      Now, instead of using NOUN$ and VERB$ in the compare loops of the parser, 
  51. use VB$ and NN$. You likewise should adjust your verb and noun lists to 
  52. contain the shortened words instead of the whole words as you indicated 
  53. earlier. 
  54.      This technique is by no means necessary, it's just nice to know about if 
  55. you get into a situation (as adventure authors always do) where they are 
  56. coming down to the wire and running out of memory faster than plot ideas!
  57.      Another shorthand is the time-honored method of allowing the user to 
  58. input N for GO NORTH or U for GO UP. This again is east to code. Just add the 
  59. following lines IMMEDIATELY after the INPUT line of the parser input routine:
  60.      
  61.      1101 IF AN$="N" THEN AN$="GO NORTH"
  62.      1102 IF AN$="E" THEN AN$="GO EAST"
  63.      1103 IF AN$="S" THEN AN$="GO SOUTH"
  64.      1104 IF AN$="W" THEN AN$="GO WEST"
  65.      1105 IF AN$="U" THEN AN$="GO UP"
  66.      1106 IF AN$="D" THEN AN$="GO DOWN"
  67.      
  68.      And last but not least, ANY one word command can be shortened to 3 or 4 
  69. character input by this coding technique:
  70.      
  71.      2000 IF LEFT$(AN$,3)="INV" THEN 13000
  72.      2010 IF LEFT$(AN$,3)="HEL" THEN 11000
  73.      
  74.      and so on.
  75.      
  76. WORD LISTS
  77.      
  78.      This is a nice touch if you have the memory and the inclination. 
  79. Sometimes it is especially hard for a new adventurer to get the hang of just 
  80. how to phrase what he wishes to say. A "Words" list willdisplay all of the 
  81. words that the computer understands. It is just a print routine that has all 
  82. the full-length words typed into it and displayed when the one-word command 
  83. "WORDS" is issued.
  84.      
  85. OPENING INVISABLE DOORS
  86.      
  87.      The day will come when you want a door to open when something or the 
  88. other is done (like waving a wand or using a key). This is done by 
  89. manipulation of the D(X,6) array. When the triggering even occurs, let us say 
  90. you wish to open a door to the west. Do the following:
  91.      
  92.      23650 D(L,4)=16:GOTO 1000
  93.      
  94.      This opens a door from the current room to room 16. (The previous number 
  95. stored in D(L,4) was a 0).
  96.      
  97. SAVES and LOADS
  98.      
  99.      This also is a nice, much appreciated touch you can give your players. 
  100. This saves the current game situation to disk, so you can come back to that 
  101. point if you are killed, or if you get called to supper and have to shut the 
  102. machine off. It simply consists of a routine to save all the variables that 
  103. might be changed, and call them back later.
  104.      Start by opening the save file, using whatever format your BASIC demands. 
  105. Next, save the locations of all objects:
  106.      
  107.      50010 FOR X=1 TO OBJECTS:PRINT #1, OBJECT$(X):NEXT
  108.      
  109.      Next, if the door configuration ever changes in your adventure (if you 
  110. allow doors to open or close), save your D array. This is NOT required if you 
  111. never modify this array.
  112.      
  113.      50020 FOR X=1 TO NUMBEROFROOMS:FOR Y=1 TO 6
  114.      50030 PRINT #1,D(X,Y):NEXT Y:NEXT X
  115.      
  116.      Finally, save any flag variables you may have, and the current room 
  117. number L:
  118.      
  119.      50040 PRINT #1,L,QQ,KILLFLAG,PRIZEFLAG
  120.      
  121.      and then close your file. You will want to display an appropriate message 
  122. while this is going on.
  123.      To restore the game, direct the program to code that will read all this 
  124. stuff back into the arrays, in the same order.
  125.      
  126.      
  127. ENDING THE GAME
  128.      
  129.      By the way, Hemmingway, please be sure to include some sort of a printed 
  130. statement in the adventure to the effect that the whole puzzle has been 
  131. solved, and the adventure is over. I remeber playing one for two days after 
  132. I'd solved it all because it didn't bother to TELL ME THAT!
  133.      
  134.      
  135. MACHINE SPECIFIC STUFF
  136.      
  137.      I have made a very genuine attempt so far to do all coding in PLAIN 
  138. VANILLA BASIC... BASIC that will run on any computer. This code, however, 
  139. produces an adventure whose status screen scrolls off the screen, and is 
  140. replaced after each event. A more attractive coding is possible, but it 
  141. requires more sophistocated coding, and is different for each machine we 
  142. support here. I'm going to discuss what happens here, and then direct you to 
  143. another file in the library that has the revised parser for your particular 
  144. machine.
  145.      
  146.      The simplist way to keep the display screen at the top of the screen is 
  147. to clear it after each action. This is not cool, though, because the adventure 
  148. plays easier if the player can see his last few moves still displayed in a 
  149. screen scroll. This can be done on all machines, but requires manipulation of 
  150. the cursor on the screen, and some additional code to clean up potential 
  151. messes. Here is the sequence of events. Read and understand it, then look at 
  152. the file for your machine and try to understand how the code does these 
  153. things.
  154.      1. Position the cursor at the upper left-hand corner of the screen.
  155.      2. Reprint the status screen (updated), but be sure the erase anything to 
  156. the right of the last thing written on each line. This is required to cover up 
  157. garbage that collects from the bottom of the screen.
  158.      3. Blank the line just below the line of dashes.
  159.      4. Position the cursor on the left-hand side of the bottom line of the 
  160. screen.
  161.      The examples are saved as:
  162.      IBM.SCR
  163.      APPLE.SCR
  164.      COMM.SCR
  165.  
  166.  
  167.  
  168.  
  169.  
  170.